เทคนิคการรับค่าจาก Input ชนิด Array
ช่วงนี้เขียนเรื่องฟอร์ม และ Input แบบ Array ติดๆกันหลายเรื่องเลย อันเนื่องมาจากมีหลายคำถาม ถามกันมาพอสมควร ปกติแล้ว ตอนสร้าฟอร์มแบบ Array คงไม่งงกันเท่าไร แค่ไม่ระบุ id ของ input ลงไปเท่านั้น แต่อีตอนรับสิ จะรู้ได้ไง ว่าอันไหนเป็นอันไหน
เทคนิคนี้คงต้องอาศัยความเข้าใจเกี่ยวกับ array และคำสั่ง foreach มาประยุกต์ใช้ก่อนละครับ
เริ่มต้นก็มาดูกันก่อนเลย คำสั่ง print_r() จะสามารถบอกได้ว่า มีอะไรบ้างหนอที่ส่งมาบ้าง เพื่อดูผลลัพท์ และ รูปแบบ เพื่อมาใช้งานกับ Array ได้
text จะถูกส่งมาในรูปแอเรย์แบบที่ไม่ระบุอันดับ ซึ่งเราสามารถอ่านค่าที่ส่งมาได้จาก foreach ซึ่งอันดับสามารถอ่านได้จากตัวแปร $i ในโค้ดครับ
ส่วนค่าต่างๆ สามารถอ่านได้จากตัวแปร $text หรือ $num หรือ $file ที่เป็นตัวหนาครับ ในส่วนของ input ชนิด file ซึ่งยังมี property อื่นๆ ที่สามารถอ่านได้อีกก็สามารถอ่านได้จากตัวแปร $_FILE[file][size][$i] ครับ
จากตัวอย่างการส่งไฟล์ ถึงแม้ว่าเราจะมี Input หลายอัน แต่เราสามารถที่จะอ่านค่าจาก Input ที่เลือกไฟล์ไว้เท่านั้นได้ด้วยการตรวจสอบตัวแปร $file เพื่อดูค่าว่างครับ
เทคนิคนี้คงต้องอาศัยความเข้าใจเกี่ยวกับ array และคำสั่ง foreach มาประยุกต์ใช้ก่อนละครับ
<?php
if (isset($_POST[submit])) { // ตรวจสอบว่ามาจากการ submit หรือไม่
print_r($_POST);
print_r($_FILES);
// text แบบ array
foreach($_POST[text] AS $i => $text) {
echo "value of text[$i]='$text'<br />";
}
// text แบบ array
foreach($_POST[num] AS $i => $text) {
echo "value of num[$i]='$text'<br />";
}
// file แบบ array
foreach($_FILES[file][tmp_name] AS $i => $file) {
if ($file != '') { // ตรวจสอบว่ามีการเลือกไฟล์มาหรือไม่
echo "value of file[$i][tmp_name]='$file'<br />";
echo "size of file[$i][size]='".$_FILES[file][size][$i]."' byte<br />";
}
}
}
?>
<form action="?" method="post" enctype="multipart/form-data">
<p>Input แบบ dynamic Array (ไม่ระบุ id ของ array)</p>
<p><input type="text" name="text[]" /></p>
<p><input type="text" name="text[]" /></p>
<p>Input แบบ Array (ระบุ id ของ array มาด้วย)</p>
<p><input type="text" name="num[0]" /></p>
<p><input type="text" name="num[1]" /></p>
<p>Input ชนิดไฟล์ แบบ dynamic Array (ไม่ระบุ id ของ array)</p>
<p><input type="file" name="file[]" /></p>
<p><input type="file" name="file[]" /></p>
<p><input type="submit" name="submit" value="Submit" /></p>
</form>
เริ่มต้นก็มาดูกันก่อนเลย คำสั่ง print_r() จะสามารถบอกได้ว่า มีอะไรบ้างหนอที่ส่งมาบ้าง เพื่อดูผลลัพท์ และ รูปแบบ เพื่อมาใช้งานกับ Array ได้
text จะถูกส่งมาในรูปแอเรย์แบบที่ไม่ระบุอันดับ ซึ่งเราสามารถอ่านค่าที่ส่งมาได้จาก foreach ซึ่งอันดับสามารถอ่านได้จากตัวแปร $i ในโค้ดครับ
ส่วนค่าต่างๆ สามารถอ่านได้จากตัวแปร $text หรือ $num หรือ $file ที่เป็นตัวหนาครับ ในส่วนของ input ชนิด file ซึ่งยังมี property อื่นๆ ที่สามารถอ่านได้อีกก็สามารถอ่านได้จากตัวแปร $_FILE[file][size][$i] ครับ
จากตัวอย่างการส่งไฟล์ ถึงแม้ว่าเราจะมี Input หลายอัน แต่เราสามารถที่จะอ่านค่าจาก Input ที่เลือกไฟล์ไว้เท่านั้นได้ด้วยการตรวจสอบตัวแปร $file เพื่อดูค่าว่างครับ